2k words

SQLite 是一款轻型的数据库,在嵌入式设备中应用十分广泛,它支持Windows/Linux/Unix等等主流的操作系统,其源代码不受版权限制。

优点:

  • 不需要安装与配置,以文件的形式作为数据库
  • 轻量、小型,对嵌入式设备十分友好
  • 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问
  • 支持 SQL92(SQL2)标准的大多数查询语言的功能

SQLite的命令包括:

分类 命令 描述
表操作 CREATE 创建表
表操作 ALTER 修改表
表操作 DROP 删除表
记录操作 INSERT 插入记录
记录操作 UPDATE 修改更新表记录
记录操作 DELETE 删除记录
检索 SELECT 查询记录
1.3k words

索引

字符串的索引是只读,不能修改,从左到右的索引以0开始,从右到左的索引以-1开始(因为-0=0程序无法识别左右)

1
2
3
4
test = 'name'
c1 = test[0] #n
c2 = test[-1] #e
c3 = test[-2] #m
1.9k words

概述

C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:

1
2
3
4
5
6
7
8
[捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}

//计算两个值的和
auto func = [](int a, int b) -> int{return a+b;};
//当返回值的类型是确定时,可以忽略返回值
auto func = [](int a, int b){return a + b;};
//调用
int sum = func(1, 3);

语法分析

捕获列表

Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Labmda
{
public:
const int test;
Labmda(int value):test(value)
{
}
public:
int run(int a, int b)
{
return a + b + test;
}
}

int main()
{
int test = 10;
auto func = Labmda(test);
int sum = func.run(1, 3);
}

//使用Lambda 表达式的写法
int main()
{
int test = 10;
auto func = [test](int a, int b){return a + b + test;};
int sum = func(1, 3);
}

捕获列表有以下格式:

格式 描述
[] 不带任何参数
[=] Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递
[&] Lambda表达式之前的局部变量,包括所在类的this,变量按引用方式传递
[this] Lambda表达式所在类的this
[a] Lambda表达式之前的局部变量a的值,也可以传入多个值,如[a , b]
[&a] Lambda表达式之前的局部变量a的引用

关键字声明

关键字声明一般都很少用到,也不建议随便使用,可以忽略不计。

mutable

当捕获列表以值的方式传递时有效,加上此关键字后,可以修改Lambda类成员(带const修饰符)。比如:

1
2
3
4
5
int test = 10;
//编译报错,test成员不能修改
auto func = [test](int a, int b){test = 8; return a + b + test;};
//编译正常
auto func = [test](int a, int b)mutable {test = 8; return a + b + test;};

这里需要注意的是:Lambda类成员test修改之后,并不会改变外部int test的值。

exception

exception 声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用 throw(int)

示例

捕获列表按值传递

1
2
3
4
int test = 10;
auto func = [=](int a, int b){return a + b + test;};
auto func2 = [test](int a, int b){return a + b + test;};
int sum = func(1, 3); //sum等于14

这里需要注意的是func表达式中test的值只更新到表达式之前:

1
2
3
4
int test = 10;
auto func = [=](int a, int b){return a + b + test;};
test = 5;
int sum = func(1, 3); //sum还是等于14

捕获列表按引用传递

1
2
3
4
int test = 10;
auto func = [&](int a, int b){test = 5; return a + b + test;};
auto func2 = [&test](int a, int b){test = 5; return a + b + test;};
int sum = func(1, 3); //sum等于9,test等于5

这里func表达式中test的值就能随时更新:

1
2
3
4
int test = 10;
auto func = [&](int a, int b){return a + b + test;};
test = 5;
int sum = func(1, 3); //sum等于9,test等于5
2.6k words

目录与文件

目录

  1. 创建目录:mkdir xxx
  2. 删除目录:rm -rf xxx
  3. 切换目录:cd xxx,返回:cd -
  4. 复制目录:cp ./test ./test3 -r -p-r表示递归,-p表示保留文件属性

文件

  1. 创建文件:touch xxx.txt
  2. 复制文件:cp xxx.txt newxxx.txt
  3. 查看文件:cat xxx.txt,最后5行:cat xxx.txt | tail -n 5

其他

  1. 显示列表:ls -lh
  2. 连接文件夹:ln -s 源文件夹 目标文件夹
6.3k words

QT使用QSS(Qt Style Sheet)来设置控件样式并进行个性化定制和界面美化。QSS的语法和CSS十分类似,都是使用选择器来配置控件属性。

QT导入QSS样式文件的方式也十分简单,只需要调用setStyleSheet进行设置:

1
2
3
4
5
QApplication app(argc, argv);
QFile qss("style.qss");
qss.open(QFile::ReadOnly);
app.setStyleSheet(qss.readAll());
qss.close();
1.1k words

个人网盘的搭建需要先搭建环境,再安装网盘程序。环境的搭建一般使用宝塔面板,网盘程序选择Cloudreve,功能全面,界面简洁而且更新频率高。